package twoD.IsoPfem;

import java.util.ArrayList;

import inf.jlinalg.IMatrix;
import inf.jlinalg.IVector;
import inf.jlinalg.Vector3D;
import twoD.IsoPfem.Structure.CType;

/**
 * this interface represent for all pure isoparametric elements (not account
 * embedded crack elements,...)
 * 
 * @author hbui
 * 
 */
public interface IElement {
	void setId(int i);

	int getId();

	void setRealTable(RealTable realTable);

	RealTable getRealTable();

	Node getNodes(int idx);

	ArrayList<Node> getNodes();

	int getNumberOfNodes();

	IEdge getEdges(int idx);

	ArrayList<IEdge> getEdges();

	int getNumberOfEdges();

	IFace getFaces(int idx);

	ArrayList<IFace> getFaces();

	int getNumberOfFaces();

	IGeometry getGeometry();

	void setGeometry(IGeometry G);

	IVector getXe();

	IVector getUe();

	Vector3D getCog();

	double getDiameter();

	void enumerateDOFs();

	ArrayList<Integer> getDOFNumbers();

	double getVolume();

	IMatrix getCMatrix();

	void setCType(CType c);

	void addEdgeLoad(EdgeLoad load);

	ArrayList<EdgeLoad> getEdgeLoadList();

	IMatrix computeTangentStiffnessMatrix();

	IVector computeInternalForceVector();

	void computeExternalForceVector();

	IVector computeEpsilon(double... xi);

	IVector computeSigma(double... xi);

	double[] computeSigma1(double... xi);

	void print();


}
